package com.lailai.service.impl;

//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.lailai.entity.Version;
import com.lailai.entity.vo.VersionVO;
import com.lailai.mapper.VersionConvertMapper;
import com.lailai.mapper.VersionMapper;
import com.lailai.service.VersionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
//import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 版本服务实现类
 */
@Service
public class VersionServiceImpl implements VersionService {

    private final VersionMapper versionMapper;
    private final VersionConvertMapper versionConvertMapper;
    // 创建日志记录器
    private static final Logger logger = LoggerFactory.getLogger(VersionServiceImpl.class);

    @Autowired
    public VersionServiceImpl(VersionMapper versionMapper, VersionConvertMapper versionConvertMapper) {
        this.versionMapper = versionMapper;
        this.versionConvertMapper = versionConvertMapper;
    }


    /**
     * 分页查询版本
     * sql语句查询
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分页后的版本VO列表
     */
    @Override
    public Page<VersionVO> selectVersions(int pageNum, int pageSize) {
        Version version = versionMapper.selectVersions(1, 10).get(0);

        VersionVO vo = new VersionVO();
        vo.setId(version.getId());
        List<Version> versions = versionMapper.selectVersions(pageNum, pageSize);
        List<VersionVO> versionVOList = versionConvertMapper.toVOs(versions); //
        // 假设你有获取总记录数的方法
        long total = versionMapper.countAllVersions(); // 需要在 VersionMapper 中定义 countAllVersions 方法
        if (versionVOList.isEmpty()) {
            logger.warn("No data found for pageNum: {}, pageSize: {}", pageNum, pageSize);
        }
        return new PageImpl<>(versionVOList, PageRequest.of(pageNum - 1, pageSize), total);

    }
//
//    /**
//     * 创建新版本
//     *
//     * @param versionDTO 版本数据
//     * @return 创建后的版本DTO
//     */
//    @Override
//    public VersionDTO createVersion(VersionDTO versionDTO) {
//        if (existsByVersionNumber(versionDTO.getVersionNumber())) {
//            throw new ResourceNotFoundException("版本号 " + versionDTO.getVersionNumber() + " 已存在");
//        }
//
//        Version version = VersionMapperUtil.toVersionEntity(versionDTO);
//        versionMapper.insert(version);
//
//        return VersionMapperUtil.toVersionDTO(version);
//    }
//
//    /**
//     * 更新版本信息
//     *
//     * @param id         版本ID
//     * @param versionDTO 更新的版本数据
//     * @return 更新后的版本DTO
//     */
//    @Override
//    public VersionDTO updateVersion(Long id, VersionDTO versionDTO) {
//        Version existingVersion = versionMapper.selectById(id);
//        if (existingVersion == null) {
//            throw new ResourceNotFoundException("版本不存在，ID: " + id);
//        }
//
//        // 检查版本号是否被占用
//        if (!existingVersion.getVersionNumber().equals(versionDTO.getVersionNumber()) &&
//                existsByVersionNumber(versionDTO.getVersionNumber())) {
//            throw new ResourceNotFoundException("版本号 " + versionDTO.getVersionNumber() + " 已存在");
//        }
//
//        Version version = VersionMapperUtil.toVersionEntity(versionDTO);
//        version.setId(id); // 保留原始ID
//        versionMapper.updateById(version);
//
//        return VersionMapperUtil.toVersionDTO(version);
//    }
//
//    /**
//     * 根据ID获取版本详情
//     *
//     * @param id 版本ID
//     * @return 版本DTO
//     */
//    @Override
//    public VersionDTO getVersionById(Long id) {
//        Version version = versionMapper.selectById(id);
//        if (version == null) {
//            throw new ResourceNotFoundException("版本不存在，ID: " + id);
//        }
//        return VersionMapperUtil.toVersionDTO(version);
//    }
//
//    /**
//     * 获取所有版本列表
//     *
//     * @return 版本DTO列表
//     */
//    @Override
//    public List<VersionDTO> getAllVersions() {
//        return versionMapper.selectList(null).stream()
//                .map(VersionMapperUtil::toVersionDTO)
//                .collect(Collectors.toList());
//    }
//
//    /**
//     * 分页查询版本
//     *
//     * @return 分页后的版本DTO
//     */
//
//
//    /**
//     * 根据版本号查询版本
//     *
//     * @param versionNumber 版本号
//     * @return 版本DTO
//     */
//    @Override
//    public VersionDTO getVersionByVersionNumber(String versionNumber) {
//        Version version = versionMapper.selectByVersionNumber(versionNumber);
//        if (version == null) {
//            throw new ResourceNotFoundException("版本不存在，版本号: " + versionNumber);
//        }
//        return VersionMapperUtil.toVersionDTO(version);
//    }
//
//    /**
//     * 获取所有公开版本
//     *
//     * @return 公开版本DTO列表
//     */
//    @Override
//    public List<VersionDTO> getAllPublicVersions() {
//        return versionMapper.selectAllPublicVersions().stream()
//                .map(VersionMapperUtil::toVersionDTO)
//                .collect(Collectors.toList());
//    }
//
//    /**
//     * 获取最新的公开版本
//     *
//     * @return 最新公开版本DTO
//     */
//    @Override
//    public VersionDTO getLatestPublicVersion() {
//        Version version = versionMapper.selectLatestPublicVersion();
//        if (version == null) {
//            throw new ResourceNotFoundException("没有可用的公开版本");
//        }
//        return VersionMapperUtil.toVersionDTO(version);
//    }
//
//    /**
//     * 删除版本
//     *
//     * @param id 版本ID
//     */
//    @Override
//    public void deleteVersion(Long id) {
//        Version version = versionMapper.selectById(id);
//        if (version == null) {
//            throw new ResourceNotFoundException("版本不存在，ID: " + id);
//        }
//        versionMapper.deleteById(id);
//    }
//
//    /**
//     * 检查版本号是否存在
//     *
//     * @param versionNumber 版本号
//     * @return 是否存在
//     */
//    @Override
//    public boolean existsByVersionNumber(String versionNumber) {
//        Version version = versionMapper.selectByVersionNumber(versionNumber);
//        return version != null;
//    }
}
